package com.example.demo.pojo.dto.dingtalk;

import cn.hutool.core.util.StrUtil;
import com.example.demo.enums.DingMsgTypeEnum;
import lombok.Data;

import java.io.UnsupportedEncodingException;
import java.net.URLEncoder;

/**
 * 钉钉机器人actionCard类型消息通知请求dto
 *
 * @author TongDaShuai
 * @since 2021/12/14
 */
@Data
public class ActionCardReqDto extends BaseRobotMsgNotifyReqDto {


    /**
     * actionCard类型消息
     */
    private ActionCardDto actionCard;

    /**
     * 构建请求参数
     *
     * @return
     */
    public static ActionCardReqDto build() {
        ActionCardReqDto req = new ActionCardReqDto();
        req.setMsgtype(DingMsgTypeEnum.actionCard.name());
        return req;
    }



    /**
     * 设置 markdown格式的消息
     *
     * @param text markdown格式的消息
     * @return
     */
    public ActionCardReqDto text(String text) {
        if (this.actionCard == null) {
            this.actionCard = new ActionCardDto();
        }
        this.actionCard.text = text;
        return this;
    }

    /**
     * 设置 首屏会话透出的展示内容。
     *
     * @param title 首屏会话透出的展示内容。
     * @return
     */
    public ActionCardReqDto title(String title) {
        if (this.actionCard == null) {
            this.actionCard = new ActionCardDto();
        }
        this.actionCard.title = title;
        return this;
    }

    /**
     * 设置 单个按钮的标题
     *
     * @param singleTitle 单个按钮的标题
     * @return
     */
    public ActionCardReqDto singleTitle(String singleTitle) {
        if (this.actionCard == null) {
            this.actionCard = new ActionCardDto();
        }
        this.actionCard.singleTitle = singleTitle;
        return this;
    }


    /**
     * 设置 点击消息跳转的URL
     *
     * @param singleURL 点击消息跳转的URL
     * @param pcSlide true,表示在PC客户端侧边栏打开;false：表示在浏览器打开
     * @return
     */
    public ActionCardReqDto singleURL(String singleURL, boolean pcSlide) throws UnsupportedEncodingException {
        if (this.actionCard == null) {
            this.actionCard = new ActionCardDto();
        }
        String encUrl = URLEncoder.encode(singleURL, "UTF-8");
        this.actionCard.singleURL = StrUtil.format("dingtalk://dingtalkclient/page/link?url={}&pc_slide={}", encUrl, pcSlide);
        return this;
    }

    /**
     * 设置 点击消息跳转的URL(默认在浏览器打开)
     *
     * @param singleURL 点击消息跳转的URL
     * @return
     */
    public ActionCardReqDto singleURL(String singleURL) throws UnsupportedEncodingException {
        return singleURL(singleURL, false);
    }

    /**
     * 设置 按钮方向
     *
     * @param btnOrientation 按钮方向: 0-按钮竖直排列 1-按钮横向排列
     * @return
     */
    public ActionCardReqDto btnOrientation(String btnOrientation) {
        if (this.actionCard == null) {
            this.actionCard = new ActionCardDto();
        }
        this.actionCard.btnOrientation = btnOrientation;
        return this;
    }

    @Data
    public static class ActionCardDto {

        /**
         * 首屏会话透出的展示内容
         */
        private String title;

        /**
         * markdown格式的消息
         */
        private String text;

        /**
         * 单个按钮的标题
         */
        private String singleTitle;

        /**
         * 点击消息跳转的URL.希望在外部浏览器打开，请参考https://open.dingtalk.com/document/orgapp-server/message-link-description?spm=ding_open_doc.document.0.0.181d5e59XfR1Yz#topic-1945743
         */
        private String singleURL;

        /**
         * 按钮方向：
         * 0-按钮竖直排列
         * 1-按钮横向排列
         */
        private String btnOrientation;

    }

}
